home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / ICNDRW_1.ARJ / CNVICON.PAS < prev    next >
Pascal/Delphi Source File  |  1991-08-16  |  4KB  |  177 lines

  1. program convert_source_2_binary;
  2.  
  3. {$X+}
  4.  
  5. uses crt,dos,bgidriv,graph;
  6.  
  7. const
  8.   maxx=50;
  9.   maxy=50;
  10.   tag : string = 'CONVERT ICON 1.0 -- Copyright (c) 1991 -- SofDesign Technology';
  11.  
  12. type
  13.   icon_header_rec = record
  14.     len,
  15.     height : integer;
  16.     title  : string[25];
  17.   end;
  18.  
  19.   bicon_header_rec = record
  20.     len,
  21.     height : integer;
  22.     fname  : string[12];
  23.     title  : string[25];
  24.     size   : longint;
  25.   end;
  26.  
  27.  
  28.   buffertype = array [1..maxx,1..maxy] of byte;
  29.  
  30.  
  31. var
  32.   buffer : buffertype;
  33.   header : icon_header_rec;
  34.   b_header : bicon_header_rec;
  35.   startx,
  36.   starty : integer;
  37.   files : array [1..500] of string[12];
  38.   numfiles : integer;
  39.  
  40. {$I grafinit.pas}
  41.  
  42. function int_to_str(gag:integer):string;
  43. var temp:string;
  44. begin
  45.   str(gag,temp);
  46.   int_to_str:=temp;
  47. end;
  48.  
  49. function upstr(gag:string):string;
  50. var i : integer;
  51. begin
  52.   for i:= 1 to length(gag) do
  53.     gag[i]:=upcase(gag[i]);
  54.   upstr:=gag;
  55. end;
  56.  
  57.  
  58. function load_icon_source(fname:string):boolean;
  59. var f:file;
  60.     ok:boolean;
  61. begin
  62.   ok:=false;
  63.   assign(f,fname);
  64.   reset(f,1);
  65.   if ioresult=0 then
  66.   begin
  67.     ok:=true;
  68.     blockread(f,header,sizeof(header));
  69.     blockread(f,buffer,sizeof(buffer));
  70.     close(f);
  71.   end;
  72.   load_icon_source:=ok;
  73. end;
  74.  
  75. procedure save_icon_binary(t:string; fn:string);
  76. var f:file;
  77.     size:longint;
  78.     p:pointer;
  79. begin
  80.   b_header.len:=header.len;
  81.   b_header.height:=header.height;
  82.   b_header.title:=t;
  83.   b_header.fname:=upstr(fn);
  84.   assign(f,fn);
  85.   rewrite(f,1);
  86.   size:=imagesize(startx,starty,startx+header.len,starty+header.height);
  87.   b_header.size:=size;
  88.   blockwrite(f,b_header,sizeof(b_header));
  89.   getmem(p,size);
  90.   getimage(startx,starty,startx+header.len,starty+header.height,p^);
  91.   blockwrite(f,p^,size);
  92.   freemem(p,size);
  93.   close(f);
  94. end;
  95.  
  96.  
  97. procedure help;
  98. begin
  99.   writeln(tag);
  100.   writeln;
  101.   writeln('Usage: CNVICON <filename>');
  102.   writeln;
  103.   writeln('Notes:');
  104.   writeln;
  105.   writeln('This program will convert source file icons to ICN files that will work');
  106.   writeln('with your machine''s graphics card.  For instance, an ICN file that was');
  107.   writeln('created on a CGA will not display correctly on an EGA or VGA, but EGA');
  108.   writeln('and VGA ICN files will display fine on either and EGA or VGA screen');
  109.   writeln;
  110.   writeln('FILENAME can be a single file or contain wildcard information');
  111.   halt(1);
  112. end;
  113.  
  114. procedure readfiles(f:string);
  115. var s : searchrec;
  116. begin
  117.   numfiles:=0;
  118.   findfirst(f,anyfile,s);
  119.   while doserror=0 do
  120.   begin
  121.     inc(numfiles);
  122.     files[numfiles]:=s.name;
  123.     findnext(s);
  124.   end;
  125. end;
  126.  
  127. procedure convert(fn : string);
  128. var i,j:integer;
  129.     fname:string;
  130. begin
  131.   load_icon_source(fn);
  132.   with header do
  133.   begin
  134.     setfillstyle(solidfill,0);
  135.     bar(startx,starty,startx+maxx,starty+maxy);
  136.     moveto(startx,starty);
  137.     for i := 1 to len do
  138.       for j:=1 to height do
  139.         putpixel(startx+i-1,starty+j-1,buffer[i,j]);
  140.     fname:=fn;
  141.     if pos('.',fname)<>0 then
  142.       fname:=copy(fname,1,pos('.',fname)-1);
  143.     fname:=fname+'.ICN';
  144.     save_icon_binary(title,fname);
  145.   end
  146. end;
  147.  
  148. procedure main;
  149. var i:integer;
  150.     f:string;
  151. begin
  152.   f:=paramstr(1);
  153.   readfiles(f);
  154.   if numfiles>0 then
  155.   begin
  156.     grafinit;
  157.     outtextxy(1,1,tag);
  158.     startx:=getmaxx div 2;
  159.     starty:=getmaxy div 2;
  160.     setfillstyle(solidfill,0);
  161.     for i:=1 to numfiles do
  162.     begin
  163.       bar(1,10,getmaxx,20);
  164.       outtextxy(1,10,'Converting icon '+int_to_str(i)+' of '+int_to_str(numfiles));
  165.       convert(files[i]);
  166.     end;
  167.     outtextxy(1,getmaxy-10,'Press a key to exit.');
  168.     repeat until keypressed;
  169.     closegraph;
  170.   end
  171.   else
  172.     help;
  173. end;
  174.  
  175. begin
  176.   main;
  177. end.